<?php

class Usuario extends BaseUsuario
{
	/**
	 * devuelve las multas registradas del usuario en un arreglo
	 */
	public function getMultas( $criteria = null, PropelPDO $con = null ){
		return self::getMultass( $criteria, $con );
	}
	
	/**
	 * devuelve el valor de la multa a causa de los prestamos vencidos
	 * cuyo valor de multa no se encuentra registrado en el sistema
	 */
	public function getValorMultaVencidos(){
		$timeZone = new DateTimeZone('America/Bogota');
		$hoy = new DateTime("NOW", $timeZone);
		$hoy = $hoy->format('Y-m-d');
		
		$prestamos = self::getPrestamosVencidos();
		
		$actualTime = strtotime($hoy);
		$multaDia = 1000;
		$valor = 0;
		
		foreach ($prestamos As $prestamo)
		{
			$fechaEntrega = $prestamo->getFechaEntrega('Y-m-d');
			$fechaEntrega = strtotime($fechaEntrega);
			$diffDays = $actualTime - $fechaEntrega;
			$diffDays = floor($diffDays / 86400); //60*60*24=86400
			$valor += $diffDays * $multaDia;
		}
		
		return $valor;
	}
	
	/**
	 * devuelve el valor de la multa a causa de los prestamos
	 * que se entregaron despues de la fecha de entrega, cuyo valor de multa
	 * ya se encuentra registrada en el sistema
	 */
	public function getValorMultaAcentados(){
		$multas = self::getMultas();	
		$valor = 0;
		
		foreach ($multas As $multa){
			$valor += $multa->getValor();
		}
		
		return $valor;
	}
	
	/**
	 * devuelve el valor total de la multa, es decir, 
	 * el valor tanto de las multas registradas como de las que no lo estan 
	 */
	public function getValorMulta(){
		return ( self::getValorMultaAcentados() + self::getValorMultaVencidos() );
	}
	
	/**
	 * devuelve un arreglo con los prestamos que no se han entregado
	 * pero ya se vencio la fecha de entrega
	 */
	public function getPrestamosVencidos(){
		$timeZone = new DateTimeZone('America/Bogota');
		$hoy = new DateTime("NOW", $timeZone);
		$hoy = $hoy->format('Y-m-d');
		
		$c = new Criteria();
		$c->add(PrestamoPeer::CODIGOUSUARIO, $this->codigo);
		$c->add(PrestamoPeer::FECHADEVOLUCION, NULL);//Criteria::ISNULL
		$c->add(PrestamoPeer::FECHAENTREGA, $hoy, Criteria::LESS_THAN);
		
		$prestamos = self::getPrestamos($c);
		return $prestamos;
	}	
	
	/**
	 * devuelve el numero de multas registradas del usuario
	 */
	public function countMultas( Criteria $criteria = null, $distinct = false, PropelPDO $con = null ){
		return self::countMultass( $criteria, $distinct, $con );
	}
	
	/**
	 * devuelve el numero de prestamos vencidos
	 */
	public function countVencidos(){
		$timeZone = new DateTimeZone('America/Bogota');
		$hoy = new DateTime("NOW", $timeZone);
		$hoy = $hoy->format('Y-m-d');
		
		$c = new Criteria();
		$c->add(PrestamoPeer::CODIGOUSUARIO, $this->codigo);
		$c->add(PrestamoPeer::FECHADEVOLUCION, NULL);//Criteria::ISNULL
		$c->add(PrestamoPeer::FECHAENTREGA, $hoy, Criteria::LESS_THAN);
		
		$prestamos = self::countPrestamos($c);
		return $prestamos;
	}
	
	/**
	 * devuelve el numero total de multas -registradas mas vencidas- del usuario
	 */
	public function countTotalMultas(){
		return ( self::countMultas() + self::countVencidos() );
	}
	
	/**
	 * elimina las multas del usuario registradas en la base de datos
	 */
	public function deleteMultas(){
		$multas = self::getMultas();
	
		if( $multas ){
			foreach ($multas As $multa){
				$multa->delete();
			}
		}
	}
}
